package com.pig4cloud.pig.ai.controller;

import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pig4cloud.pig.common.core.util.R;
import com.pig4cloud.pig.common.log.annotation.SysLog;
import com.pig4cloud.pig.ai.entity.AiModelDevCategoryEntity;
import com.pig4cloud.pig.ai.service.AiModelDevCategoryService;
import org.springframework.security.access.prepost.PreAuthorize;
import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.http.HttpHeaders;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;

/**
 * 模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用
 *
 * @author lty
 * @date 2024-12-17 10:54:44
 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/aiModelDevCategory" )
@PreAuthorize("@pms.hasPermission('ai_aiModel_edit')" ) //统一设置具备模型的编辑权限即可访问
@Tag(description = "aiModelDevCategory" , name = "模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用管理" )
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
public class AiModelDevCategoryController {

    private final  AiModelDevCategoryService aiModelDevCategoryService;

    /**
     * 分页查询
     * @param
     * @param aiModelDevCategory 模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用
     * @return
     */
    @Operation(summary = "查询" , description = "查询" )
    @GetMapping("/list" )

    public R getAiModelDevCategoryList( @ParameterObject AiModelDevCategoryEntity aiModelDevCategory) {
        LambdaQueryWrapper<AiModelDevCategoryEntity> wrapper = Wrappers.lambdaQuery();
		wrapper.eq(Objects.nonNull(aiModelDevCategory.getModelId()),AiModelDevCategoryEntity::getModelId,aiModelDevCategory.getModelId());
		wrapper.eq(Objects.nonNull(aiModelDevCategory.getDevCategoryId()),AiModelDevCategoryEntity::getDevCategoryId,aiModelDevCategory.getDevCategoryId());
        return R.ok(aiModelDevCategoryService.list(wrapper));
    }


//    /**
//     * 通过id查询模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用
//     * @param ${pk.attrName} id
//     * @return R
//     */
//    @Operation(summary = "通过id查询" , description = "通过id查询" )
//    @GetMapping("/{${pk.attrName}}" )
//    @PreAuthorize("@pms.hasPermission('ai_aiModelDevCategory_view')" )
//    public R getById(@PathVariable("${pk.attrName}" ) ${pk.attrType} ${pk.attrName}) {
//        return R.ok(aiModelDevCategoryService.getById(${pk.attrName}));
//    }

    /**
     * 批量新增模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用
     * @param aiModelDevCategoryList 模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用
     * @return R
     */
    @Operation(summary = "新增模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用" , description = "新增模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用" )
    @SysLog("新增模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用" )
    @PostMapping("/saveBatch")
    public R saveBatch(@RequestBody List<AiModelDevCategoryEntity> aiModelDevCategoryList) {
        return R.ok(aiModelDevCategoryService.saveBatch(aiModelDevCategoryList));
    }

    /**
     * 修改模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用
     * @param aiModelDevCategory 模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用
     * @return R
     */
    @Operation(summary = "修改模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用" , description = "修改模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用" )
    @SysLog("修改模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用" )
    @PutMapping
    public R updateById(@RequestBody AiModelDevCategoryEntity aiModelDevCategory) {
        return R.ok(aiModelDevCategoryService.updateById(aiModelDevCategory));
    }

    /**
     * 通过id删除模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用
     * @param ids ${pk.attrName}列表
     * @return R
     */
    @Operation(summary = "通过id删除模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用" , description = "通过id删除模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用" )
    @SysLog("通过id删除模型和设备类别关系表，表示模型需要授权给哪种类型的设备使用" )
    @DeleteMapping("/removeByIdsAndModelId/{modelId}")
    public R removeByDevCategoryIdsAndModelId(@RequestBody Long[] ids,@PathVariable Long modelId) {
		if(ids.length>0){
			LambdaQueryWrapper<AiModelDevCategoryEntity> wrapper = Wrappers.lambdaQuery();
			wrapper.eq(Objects.nonNull(modelId),AiModelDevCategoryEntity::getModelId,modelId);
			wrapper.in(AiModelDevCategoryEntity::getDevCategoryId, Arrays.asList(ids));
			return R.ok(aiModelDevCategoryService.remove(wrapper));
		}
		return R.failed("没有需要解除授权的设备");

    }


//    /**
//     * 导出excel 表格
//     * @param aiModelDevCategory 查询条件
//   	 * @param ids 导出指定ID
//     * @return excel 文件流
//     */
//    @ResponseExcel
//    @GetMapping("/export")
//    @PreAuthorize("@pms.hasPermission('ai_aiModelDevCategory_export')" )
//    public List<AiModelDevCategoryEntity> export(AiModelDevCategoryEntity aiModelDevCategory,${pk.attrType}[] ids) {
//        return aiModelDevCategoryService.list(Wrappers.lambdaQuery(aiModelDevCategory).in(ArrayUtil.isNotEmpty(ids), AiModelDevCategoryEntity::getnull, ids));
//    }
}